/**
 * 文件名： Process.java
 *
 * 创建人：Elvin Zhao - 279152260@qq.com
 *
 * 创建时间：2019年1月2日 下午3:17:12
 *
 * 版权所有：FNII
 */
package com.z100h.supplychain.core.process;

import java.util.List;

import com.z100h.supplychain.core.Evidence;
import com.z100h.supplychain.core.EvidenceLockState;
import com.z100h.supplychain.core.EvidenceState;

/**
 * 
 * [描述信息：说明类的基本功能]
 *
 * @author Elvin Zhao - 279152260@qq.com
 * @version 1.0 Created on 2019年1月2日 下午7:24:18
 */
public interface AbstractResourceProcess<T extends Evidence> {

	/**
	 * 功能实现描述
	 * 
	 * @param args
	 * @author: Elvin Zhao - 279152260@qq.com 
	 * @date: Created on 2019年1月2日 下午3:17:12
	 */
	public static void main(String[] args) {

	}

	/** 
	 * 
	 * 检查 资源锁定状态
	 * 
	 * @param resourceIds  异常码
	 * @return
	 * @author: Elvin Zhao - 279152260@qq.com 
	 * @date: Created on 2019年1月2日 下午4:27:55
	 */
	public List<String> checkResourceLockState(final List<String> resourceIds, EvidenceLockState resourceLockState);

	/**
	 * 
	 * 锁定资源
	 * 
	 * @param resourceIds
	 * @return
	 * @author: Elvin Zhao - 279152260@qq.com 
	 * @date: Created on 2019年1月2日 下午3:55:48
	 */
	public Boolean lockResource(final List<String> resourceIds, EvidenceLockState resourceLockState);

	/**
	 * 创建 单据
	 * 
	 * @author: Elvin Zhao - 279152260@qq.com 
	 * @date: Created on 2019年1月2日 下午3:29:43
	 */
	public String createEvidence(T evidence, EvidenceState evidenceState);

	/**
	 * 关联 单据 与 资源
	 * 
	 * @param evidenceId
	 * @author: Elvin Zhao - 279152260@qq.com 
	 * @date: Created on 2019年1月2日 下午3:30:03
	 */
	public void associateEvidenceWithResource(final String evidenceId, final List<String> resourceIds);

	/**
	 * 更具单据修改资源
	 * 
	 * @param evidenceId
	 * @param resourceIds
	 * @author: Elvin Zhao - 279152260@qq.com 
	 * @date: Created on 2019年1月2日 下午4:59:52
	 */
	public void changeResourceWithEvidence(final T evidence, final List<String> resourceIds);

	/**
	 * 完成 单据
	 * 
	 * @param evidenceId
	 * @author: Elvin Zhao - 279152260@qq.com 
	 * @date: Created on 2019年1月2日 下午3:30:36
	 */
	public void finishEvidence(final String evidenceId, EvidenceState evidenceState);

	/**
	 * 解锁资源
	 * 
	 * @param resourceIds
	 * @return
	 * @author: Elvin Zhao - 279152260@qq.com 
	 * @date: Created on 2019年1月2日 下午4:13:36
	 */
	public Boolean unlockResource(final List<String> resourceIds, EvidenceLockState resourceLockState);

	/**
	 * 
	 * 资源日志记录
	 * 
	 * @param evidenceId
	 * @return
	 * @author: Elvin Zhao - 279152260@qq.com 
	 * @date: Created on 2019年1月3日 下午3:45:03
	 */
	public void resourceLogging(final List<String> evidenceId);

}
